package net;


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 网络上传文件 服务端
 */
public class TCPFileCopyServer {

    public static void main(String[] args) throws Exception {

        /*
            1.编写一个服务端和一个客户端
            2.服务端在 9999 端口监听
            3.客户端连接到服务端，发送一张图片
            4.服务端接收到客户端发送的图片，保存到 src下，发送"收到图片"再退出
            5.客户端接收到服务端发送的"收到图片"，再退出
            6.使用StreamUtils BufferedInputStream BufferedOutputStream 字节流
         */

        //1.服务端在本机监听8888端口
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务端在8888端口监听...");

        //2.等待客户端连接
        Socket socket = serverSocket.accept();

        //3.读取客户端发送的数据
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = StreamUtils.streamToByteArray(bis);

        //4.将得到的bytes数组，写入到指定的路径，就得到一个文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\IdeaCode\\javaStudy\\a.jpg"));
        bos.write(bytes);
        bos.close();

        //5.向客户端恢复"收到图片"
        // 通过 socket 获取到输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        writer.write("收到图片");
        writer.flush(); //刷新
        socket.shutdownOutput();    //设置写入结束标记


        //关闭其他资源
        writer.close();
        bis.close();
        socket.close();
        serverSocket.close();



    }
}
